package gamefw.gameplugin;


/**
 * A factory for creating Game Logic related objects.
 * The concrete implementations of this factory will be called by the
 * framework to create all game logic related objects.
 */
public interface IGameAbstractFactory {

	/**
	 * Creates the game resource properties object
	 * 
	 * @return reference to the game resource properties object 
	 */
	public IGameResourceProperties createGameResourceProperties();
	
	/**
	 * Creates a new GameLogic object.
	 *
	 * @return the game logic
	 */
	public AbstractGameLogic createGameLogic();

	/**
	 * Creates a new GameBoard object.
	 *
	 * @return the concrete game board implementation
	 */
	public GameBoard createGameBoard();

	/**
	 * Creates a Player object.
	 *
	 * @param isHuman the player type. true for human and false for computer
	 * @return the concrete IPlayer implementation
	 */
	public AbstractPlayer createPlayer(boolean isHuman);

	/**
	 * Creates the list of game entities that will be used in the game.
	 *
	 * @param entities the list of entity names
	 * @return the list of concrete GameEntity implementations
	 */
	public GameEntity[] createGameEntities(String[] entityNames);


	/**
	 * Creates a game entity with given entity name(type)
	 *
	 * @param entityName name of the entity
	 * @return the reference of the created game entity object
	 */
	public GameEntity createGameEntity(String entityName);
	
}